iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
Modern Web

MySQL,我的超人系列 第 10

Day10-MySQL的觸發(Triggers)

  • 分享至 

  • xImage
  •  

觸發Triggers

定義

插入、更新、刪除前自動執行的SQL語句,方便保持數據的一致性

簡介

就像手槍的板機一樣,設定好Triggers後,執行對應的SQL時就會發動,要注意的是,手槍有可能走火,Triggers也是,在操作表時要注意不要修改到觸發表,不然可能導致無限迴圈。

1.時間點:BEFORE、AFTER
2.事件:INSERT、UPDATE、DELETE

想像成組裝積木總共可以得到2X3=6個組合的觸發,也就是
1.BEFORE INSERT
2.BEFORE UPDATE
3.BEFORE DELETE
4.AFTER INSERT
5.AFTER UPDATE
6.AFTER UDELETE

舉例

資料庫中有兩張表,pays、bills,有顧客成立一筆新pay後,就會自動更新bills中的總額
https://ithelp.ithome.com.tw/upload/images/20220924/20144865QViBFL5UTg.jpg

基本操作

創建一個trigger

CREATE TRIGGER <命名>_<時間點>_<事件>
ON <綁定的資料表>
FOR EACH ROW -- 每一行
<插入、更新、刪除等邏輯>;

刪除一個trigger

DROP TRIGGER <名稱>;

顯示所有trigger

SHOW TRIGGERS;

實際操作

1.打開Query Tab

DELIMITER $$

CREATE TRIGGER pays_after_insert
    AFTER INSERT ON pays
    FOR EACH ROW
BEGIN
    UPDATE bills
    SET total = total + NEW.amount
    WHERE client_id = NEW.client_id;
END$$

DELIMITER ;

2.執行後可以用SHOW TRIGGERS確認成功
https://ithelp.ithome.com.tw/upload/images/20220924/20144865KY4ujShlxP.jpg

3.還未新增pay的client_id=7顧客,金額是540
https://ithelp.ithome.com.tw/upload/images/20220924/201448651ZDcY1Pj5K.jpg

4.讓他帳單變貴吧,新增一筆100元的pay
https://ithelp.ithome.com.tw/upload/images/20220924/20144865gBiXQFUVcx.jpg

5.笑死,帳單變640
https://ithelp.ithome.com.tw/upload/images/20220924/20144865DB0Ew2eqW8.jpg

預告

Day11-MySQL的事件(Events)


上一篇
Day9-MySQL的視圖
下一篇
Day11-MySQL的事件(Events)
系列文
MySQL,我的超人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言